package auto.setting;

import auto.device.Phione;
import io.appium.java_client.AppiumBy;
import io.appium.java_client.AppiumDriver;
import org.openqa.selenium.*;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

//隐私安全

public class PrivacySecurity {

//feature1:销毁账号脚本
    public String destroyAccount() throws InterruptedException {
        Phione phione = new Phione();
        AppiumDriver driver = phione.driver;
        WebDriverWait wait = phione.wait;

        //首先点击设置页面
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"设置\"`]"))).click();


        //用户列表中第一个用户的路径
        String firstUser="**/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther" +
                "/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther" +
                "/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[1]";

        //如果第一个账号检测不出来就向下滑，直到出现为止
        do{
            Map<String, Object> argsDown = new HashMap<>();
            argsDown.put("direction", "down");
            driver.executeScript("mobile: swipe", argsDown);
        }while(driver.findElements(AppiumBy.iOSClassChain(firstUser)).size()==0);



        //保存下来当前激活账号的用户名和昵称元素
        List<WebElement> nickNameAndUSerName=driver.findElement(AppiumBy.iOSClassChain(firstUser)).
                findElements(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText"));

        //保存两个元素的字符串
        String[] nickNameAndUSerNameArr=new String[2];
        nickNameAndUSerNameArr[0]=nickNameAndUSerName.get(0).getAttribute("value");
        System.out.println(nickNameAndUSerNameArr[0]);

        // 正则表达式匹配 +86 后面的数字，忽略空格和其他符号
        Pattern pattern = Pattern.compile("\\+86\\s*([0-9\\s]+)·");
        Matcher matcher = pattern.matcher(nickNameAndUSerNameArr[0]);

        String phoneNumber=null;
        // 查找匹配项并提取
        if (matcher.find()) {
            // 去除空格并提取数字部分
             phoneNumber= matcher.group(1).replaceAll("\\s+", "");
            System.out.println(phoneNumber); // 输出 10000000011
        }
        else{
            System.out.println("现在只能执行中国地区号码登录的销毁");
            return "现在只能执行中国地区号码的销毁账号";
        }

        //点击隐私安全
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("隐私安全"))).click();

        //向上滑动
        Map<String, Object> argsUp = new HashMap<>();
        argsUp.put("direction", "up");
        driver.executeScript("mobile: swipe", argsUp);

        //点击销毁账户
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("销毁账户"))).click();

        //点击弹出的下一步
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"下一步\"`]"))).click();

        //输入两步验证密码
        WebElement textBox=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeSecureTextField[`value == \"请输入两步验证密码\"`]")));
        textBox.click();
        textBox.sendKeys("123456");

        //点击下一步
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"下一步\"`]"))).click();

        //输入手机号
        WebElement textBox1=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeTextField[`value == \"输入电话号码\"`]")));
        textBox1.click();
        textBox1.sendKeys(phoneNumber);

        //点击右上角出现的下一步
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("下一步"))).click();

        //点击确认销毁账号
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"销毁账户\"`]"))).click();
        System.out.println("完成账号的销毁");
        return "销毁账号成功";
    }


//feature2:添加我的方式按钮的验证
    public String addMyWayDetection() throws InterruptedException {
        Phione phione = new Phione();
        AppiumDriver driver = phione.driver;
        WebDriverWait wait = phione.wait;

        //点击设置页面的隐私安全
        String result=clickPrivacySecurity(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }

        //检测添加我的方式
        result=addMyWayTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }


        System.out.println("添加我的方式按钮检测正常");
        driver.quit();
        return "添加我的方式按钮检测正常";
    }


//feature3:黑名单的问题
    public String blackListDetection(){
        Phione phione = new Phione();
        AppiumDriver driver = phione.driver;
        WebDriverWait wait = phione.wait;

        //首先点击联系人选项检查是不是在页面的顶部
        try{
            //点击联系人
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"联系人\"`]"))).click();

            int i=0;
            //循环五次,如果找不到顶端的我的群组这个元素就报错
            while(i<5){
                // 向下滑动
                Map<String, Object> argsDown = new HashMap<>();
                argsDown.put("direction", "down");
                driver.executeScript("mobile: swipe", argsDown);
                //我的群组选项出现的时候就证明已经滑动到页面的顶端了
                List<WebElement> list=driver.findElements(AppiumBy.accessibilityId("我的群组"));
                if(list.size()!=0){
                    break;
                }
                i++;
            }

            if(i==5){
                System.out.println("联系人页面无法找到联系人选项");
                driver.quit();
                return "当前页面无法找到联系人选项";
            }
        }catch(TimeoutException e){
            System.out.println("底部导航栏联系人选项消失");
            driver.quit();
            return "底部导航栏联系人选项消失";
        }


        //如果是在页面的顶部,则开始查看是否存在是否存在最少两个联系人，黑名单需要检查两个好友的存在
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain( "**/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[7]")));
            System.out.println("当前联系人大于等于两位");
        }catch(TimeoutException e){
            System.out.println("请至少添加两位好友再进行测试");
            driver.quit();
            return "请至少添加两个好友再进行测试";
        }


        //检查到已经最少存在两个联系人了，先将两个成员加入黑名单
        String result=blackListTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }



        System.out.println("隐私安全-黑名单功能检测正常");
        driver.quit();
        return "隐私安全-黑名单功能检测正常";
    }



//feature4:最近上线功能检测
    public String recentlyOnline(){
        Phione phione = new Phione();
        AppiumDriver driver = phione.driver;
        WebDriverWait wait = phione.wait;

        //首先点击联系人选项检查是不是在页面的顶部
        try{
            //点击联系人
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"联系人\"`]"))).click();

            int i=0;
            //循环五次,如果找不到顶端的我的群组这个元素就报错
            while(i<5){
                // 向下滑动
                Map<String, Object> argsDown = new HashMap<>();
                argsDown.put("direction", "down");
                driver.executeScript("mobile: swipe", argsDown);
                //我的群组选项出现的时候就证明已经滑动到页面的顶端了
                List<WebElement> list=driver.findElements(AppiumBy.accessibilityId("我的群组"));
                if(list.size()!=0){
                    break;
                }
                i++;
            }

            if(i==5){
                System.out.println("联系人页面无法找到联系人选项");
                driver.quit();
                return "当前页面无法找到联系人选项";
            }
        }catch(TimeoutException e){
            System.out.println("底部导航栏联系人选项消失");
            driver.quit();
            return "底部导航栏联系人选项消失";
        }


        //如果是在页面的顶部,则开始查看是否存在是否存在最少两个联系人,新增元素，最后查找的元素是6，最近上线只需要存在一个好友就行了
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain( "**/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[6]")));
            System.out.println("当前联系人大于等于两位");
        }catch(TimeoutException e){
            System.out.println("请至少添加两位好友再进行测试");
            driver.quit();
            return "请至少添加两个好友再进行测试";
        }

        String result=clickPrivacySecurity(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }

        //从这个地方往下已经是进入了隐私安全页面，开始执行最近上线的检测
        result=recentlyOnlineTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }

        driver.quit();
        System.out.println("最近上线检测正常");
        return "正常";
    }







    //-------------------下面的私有方法供上面的公有方法使用---------------------
    //feature:设置页面点击隐私安全,隐私安全选项通用，进入隐私安全的页面
    private String clickPrivacySecurity(WebDriverWait wait, AppiumDriver driver){
        //点击设置页面,滑动并点击隐私安全
        try{
            //点击设置页面
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"设置\"`]"))).click();
            //上划设置页面,让隐私安全这个选项出现
            Map<String, Object> argsUp = new HashMap<>();
            argsUp.put("direction", "up");
            driver.executeScript("mobile: swipe", argsUp);

            //点击隐私安全
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("隐私安全"))).click();
            //查看隐私安全页面是不是出现
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"隐私安全\"`]")));
        }catch(TimeoutException e){
            return "点击设置页面隐私安全选项失败";
        }
        return "正常";
    }


    //feature:已进入隐私安全页面,进行点击添加我的方式进行检测-----feature2用
    private String addMyWayTest(WebDriverWait wait, AppiumDriver driver) throws InterruptedException {
        //进入隐私安全页面后点击添加我的方式
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("添加我的方式"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("添加我为好友")));
        }catch(TimeoutException e){
            return "点击添加我的方式选项跳转页面失败";
        }

        //查看"添加我为好友" 这个按钮是不是打开的状态.打开的话就关闭,以及检测它关闭的时候,下面的按钮是否还显示
        try{
            WebElement firstButton=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeSwitch[1]")));
            //如果按钮是开启的状态,就关闭这个按钮,关闭后查看下面的所有选项是不是消失了
            if(firstButton.getAttribute("value").equals("1")){
                firstButton.click();
            }

        }catch(TimeoutException e){
            return "添加我为好友的按钮消失";
        }
        System.out.println("添加我为好友按钮已经关闭");
        Thread.sleep(2000);

        //上面已经把"添加我为好友"按钮选项关闭,或者本来就没有开启,现在检测这个按钮关闭的情况下下面的五个选项是不是没有出现
        try{
            driver.findElement(AppiumBy.accessibilityId("手机号码"));
            driver.findElement(AppiumBy.accessibilityId("用户名"));
            driver.findElement(AppiumBy.accessibilityId("二维码"));
            driver.findElement(AppiumBy.accessibilityId("群聊"));
            driver.findElement(AppiumBy.accessibilityId("邮箱"));
            return "添加我为好友按钮关闭后,下方的选项仍然会出现";
        }catch(WebDriverException  e){
            System.out.println("添加我为好友按钮关闭后,下面的选项正常消失");
        }


        //现在重新打开"添加我为好友"这个按钮
        WebElement firstButton=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeSwitch[1]")));
        firstButton.click();
        //等待两秒,让其下面的按钮加载出来
        Thread.sleep(2000);
        //重新检测这个按钮的状态
        firstButton=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeSwitch[1]")));
        if(firstButton.getAttribute("value").equals("0")){
            return "打开添加我为好友按钮点击后没有变化";
        }

        //查看下方的手机号码,用户名等按钮是不是出现了
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeSwitch[6]"))).click();//这个是邮箱按钮
            Thread.sleep(2000);
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeSwitch[5]"))).click();//这个是群聊按钮
            Thread.sleep(2000);
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeSwitch[4]"))).click();//二维码按钮
            Thread.sleep(2000);
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeSwitch[3]"))).click();//用户名按钮
            Thread.sleep(2000);
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeSwitch[2]"))).click();//手机号码按钮
        }catch(TimeoutException e){
            return "添加我为好友按钮打开后,下方的按钮选项没有出现";
        }
        Thread.sleep(2000);


        //将所有的按钮关闭后,最上方的添加我为好友应该是关闭的
        firstButton=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeSwitch[1]")));
        if(firstButton.getAttribute("value").equals("1")){
            return "下方的选项全部关闭后,最上方的添加我为好友选项没有自动关闭";
        }
        System.out.println("下方的按钮全部关闭后,添加我为好友自动关闭正常");
        //检查这几个按钮关闭后是不是还仍然会显示
        try{
            driver.findElement(AppiumBy.accessibilityId("手机号码"));
            driver.findElement(AppiumBy.accessibilityId("用户名"));
            driver.findElement(AppiumBy.accessibilityId("二维码"));
            driver.findElement(AppiumBy.accessibilityId("群聊"));
            driver.findElement(AppiumBy.accessibilityId("邮箱"));
            return "关闭下方的选项按钮后,仍然会显示";
        }catch(WebDriverException e){
            System.out.println("下方的选项正常的关闭");
        }

        //点击返回到设置页面
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("返回"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("返回"))).click();
            //检测是不是返回到了设置页面
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"设置\"`]")));
        }catch(TimeoutException e){
            return "返回到设置页面失败";
        }
        return "正常";
    }


    //feature:将两个好友加入黑名单    -----feature3用
    private String blackListTest(WebDriverWait wait, AppiumDriver driver){
        WebElement firstFriend;//名单中的第一个好友
        String firstFriendName = null;//名单中第一个好友的昵称
        boolean firstBlackState = false;//第一个好友再当前黑名单的状态， true就是已经在黑名单   false就是不在黑名单

        WebElement secondFriend;//名单中的第一个好友
        String secondFriendName=null;//名单中第一个好友的昵称
        boolean secondBlackState=false;//第一个好友再当前黑名单的状态， true就是已经在黑名单   false就是不在黑名单
        //因为要操作两个好友加入黑名单，所以要进行相应的循环,一共循环一次
        int i=1;
        while(i<3){
            try{//这个是最外层的捕获异常保证所有的异常不会报错而是正常的运行

                //获取第一个好友的元素和这个好友的昵称
                try{
                    if(i==1){
                        //对第一个好友进行定位
                        firstFriend=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther" +
                                "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther" +
                                "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[5]")));
                        //定位第一个好友之后保存第一个好友的昵称是什么，方便后面进行确认
                        firstFriendName=firstFriend.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[2]")).getAttribute("value");
                        System.out.println("第一个好友的昵称是："+firstFriendName);
                        //点击第一个好友进行设置
                        firstFriend.click();
                    }
                    else{
                        //对第一个好友进行定位
                        secondFriend=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther" +
                                "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther" +
                                "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[6]")));
                        //定位第一个好友之后保存第一个好友的昵称是什么，方便后面进行确认
                        secondFriendName=secondFriend.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[2]")).getAttribute("value");
                        System.out.println("第二个好友的昵称是："+secondFriendName);
                        //点击第一个好友进行设置
                        secondFriend.click();
                    }

                }catch(NoSuchElementException e){
                    System.out.println("当前第一个好友没有显示好友昵称");
                    return "当前第一个好友没有显示好友昵称";
                }


                //查看详情页面上方的昵称是不是消失了
                try{
                    WebElement sessionName;
                    if(i==1){
                        sessionName=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId(firstFriendName)));
                    }
                    else{
                        sessionName=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId(secondFriendName)));
                    }
                    //对会话页面上方对方的昵称进行检测
                    //等待下方元素的加载
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("icon back blue")));
                    //查看输入消息这个会话框是不是出现了，如果出现了就是没有被拉入黑名单。如果没有出现就是已经被拉入黑名单了
                    driver.findElement(AppiumBy.accessibilityId("输入消息"));
                    if(i==1){
                        firstBlackState=false;//说明当前好友没有被拉入黑名单
                    }
                    else{
                        secondBlackState=false;
                    }
                }catch(TimeoutException e){
                    System.out.println("回话页面上方的昵称消失");
                    return "会话页面上方的昵称消失";
                }catch(WebDriverException e){
                    System.out.println("当前已经被添加到黑名单");
                    //没有发现消息输入框就说明当前好友已经被添加进黑名单
                    if(i==1){
                        firstBlackState=true;//说明当前好友没有被拉入黑名单
                    }
                    else{
                        secondBlackState=true;
                    }
                }
                //点击进入详情页面
                if(i==1){
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId(firstFriendName))).click();
                }
                else{
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId(secondFriendName))).click();
                }


                //检测这个元素，如果聊天这个按钮显示出来了，说明更多这个按钮显示出来了
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"聊天\"`]")));
                //点击更多按钮
                WebElement element=driver.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"更多\"`]"));
                Rectangle rect = element.getRect();
                // 计算元素中心点的坐标
                int centerX = rect.x + (rect.width / 2);
                int centerY = rect.y + (rect.height / 2);
                // 使用 executeScript 来执行点击操作
                Map<String, Object> params = new HashMap<>();
                params.put("x", centerX);
                params.put("y", centerY);
                driver.executeScript("mobile: tap", params);


                //查找同级别元素进行时间的判断
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("删除联系人")));
                //查看更多选项中的黑名单选项
                try{
                    //找到这个元素后会进行相应的操作
                    WebElement blackButton=driver.findElement(AppiumBy.accessibilityId("加入黑名单"));
                    if(i==1 && firstBlackState==true){
                        System.out.println("会话页面显示对方已加入黑名单，更多选项中显示对方还未加入黑名单");
                        return "会话页面显示对方已加入黑名单，更多选项中显示对方还未加入黑名单";
                    }
                    else if(i==2 && secondBlackState==true){
                        System.out.println("会话页面显示对方已加入黑名单，更多选项中显示对方还未加入黑名单");
                        return "会话页面显示对方已加入黑名单，更多选项中显示对方还未加入黑名单";
                    }
                    //点击这个元素加入黑名单
                    blackButton.click();
                    //点击弹出的确定框
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("确定"))).click();
                    if(i==1){
                        firstBlackState=true;
                    }
                    else{
                        secondBlackState=true;
                    }
                }catch(TimeoutException | NoSuchElementException e){
                    try{
                        WebElement blackButton=driver.findElement(AppiumBy.accessibilityId("移出黑名单"));
                        if(i==1 && firstBlackState==false){
                            System.out.println("会话页面显示对方未加入黑名单，更多选项中显示对方已经加入黑名单");
                            return "会话页面显示对方未加入黑名单，更多选项中显示对方已经加入黑名单";
                        }
                        else if(i==2 && secondBlackState==false){
                            System.out.println("会话页面显示对方未加入黑名单，更多选项中显示对方已经加入黑名单");
                            return "会话页面显示对方未加入黑名单，更多选项中显示对方已经加入黑名单";
                        }

                        //已经是在黑名单当中了
                        if(i==1){
                            firstBlackState=true;
                        }
                        else{
                           secondBlackState=true;
                        }
                        //点击让选项消失
                        driver.executeScript("mobile: tap", params);
                    }catch(WebDriverException e1){
                        System.out.println("加入/移出 黑名单选项消失");
                        return "加入/移出 黑名单选项消失";
                    }
                }

                //点击页面上方的返回
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("返回"))).click();

                //到这个地方已经将对方加入了黑名单，直接检查输入框是不是存在
                try{
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"已加入黑名单\"`]")));
                    System.out.println("正常显示对方已加入黑名单");
                }catch(TimeoutException e){
                    System.out.println("详情页面已经显示对方加入黑名单，但会话页面没有出现将对方加入黑名单");
                    return "详情页面已经显示对方已经加入黑名单，但会话页面没有出现将对方加入黑名单";
                }

                //点击返回到聊天列表
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("icon back blue"))).click();

                //返回到聊天列表就是正常的
                try{
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("联系人")));
                }catch(TimeoutException e){
                    System.out.println("点击返回后没有返回到聊天列表");
                    return "点击返回后没有返回到聊天列表";
                }
            }catch(WebDriverException e){
                System.out.println("检测的过程中出现异常，请重新尝试，如果重新尝试后仍提示问题，请检查加入黑名单或者删除黑名单过程是否出现问题");
            }

            i++;
        }


        //        点击设置页面的隐私安全
        String result=clickPrivacySecurity(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }
        //        点击进入黑名单选项
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("黑名单"))).click();
        }catch(TimeoutException e){
            System.out.println("黑名单选项消失");
            driver.quit();
            return "黑名单选项消失";
        }

        //调用下面的方法，此方法是将两个好友用不同的方法移出黑名单
        result=removeBlacklist(wait,driver,firstFriendName,secondFriendName);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }

        return "正常";
    }


    //feature：从黑名单中将拉黑的好友移除黑名单 ----blackListTest用
    private String removeBlacklist(WebDriverWait wait,AppiumDriver driver,String firstFriendName,String secondFriendName){
        //使用这个方法的时候已经进入了隐私安全的黑名单选项了
        return "正常";
    }


    //feature:最近上线的检测 feature4用
    private String recentlyOnlineTest(WebDriverWait wait, AppiumDriver driver){
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("最近上线")));
            //获取控制器的元素
            WebElement switchButton=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.className("XCUIElementTypeSwitch")));

            //查看开关的打开状态
            if(switchButton.getAttribute("value").equals("0")){//还在关闭的状态
                //关闭的时候查看页面的元素是否显示正确
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("屏蔽所有人")));
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("只屏蔽名单")));

                //关闭的状态下打开这个开关，并查看下面的选项是否发生变更
                switchButton.click();
                Thread.sleep(1000);//设置选项后等待页面元素的变化

                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("屏蔽所有人")));
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("只允许名单"))).click();//点击只允许名单这个选项开始进行检查

                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("添加用户"))).click();

                //进入只允许名单中进行检查,首先查看弹窗是否弹起
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"添加用户\"`][2]")));

                //点击第一个用户就行
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther[2]/XCUIElementTypeOther" +
                        "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[1]/XCUIElementTypeOther[1]"))).click();

                //点击页面上方的完成
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("完成(1)"))).click();
                Thread.sleep(2000);//等待两秒，返回到上一级页面

                //返回到上一级页面后对设置的这个用户进行删除
                WebElement friend=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.className("XCUIElementTypeCell")));
                Map<String, Object> swipeArgs1 = new HashMap<>();
                swipeArgs1.put("direction", "left");
                swipeArgs1.put("element", friend); // 指定滑动的元素
                swipeArgs1.put("duration", 700);
                // 执行滑动操作
                driver.executeScript("mobile: swipe", swipeArgs1);

                //点击出现的删除按钮
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"删除\"`]"))).click();
                Thread.sleep(3000);//等待三秒查看元素是否成功删除了

                //查看是否正常的删除成功
                try{
                    driver.findElements(AppiumBy.className("XCUIElementTypeCell"));
                    return "删除名单中的好友后仍然存在";
                }catch(NoSuchElementException e){
                    //这种是正常的情况，不用处理
                }

                //

            }
            else{//这个是开关已经打开了
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("屏蔽所有人")));
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("只允许名单")));

                //开启的状态下打开这个开关，并查看下面的选项是否发生变更
                switchButton.click();
                Thread.sleep(1000);//设置选项后等待页面元素的变化

                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("屏蔽所有人")));
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("只屏蔽名单")));
            }

        }catch(TimeoutException | NoSuchElementException e){
            return "最近上线功能检测失败，请重试或者检查流程是否异常";
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        return "正常";
    }



}
